// utils/jwt.js
const CryptoJS = require('crypto-js');

class JwtUtil {
  static secretString = "token!Q2W#E$RWtoken!Q2W#E$RWtoken!Q2W#E$RW";

  // 解析 JWT token
  static parseToken(token) {
    try {
      // JWT 由三部分组成：header.payload.signature
      const parts = token.split('.');
      if (parts.length !== 3) {
        throw new Error('Invalid token format');
      }

      // 解析 payload
      const payload = parts[1];
      // Base64 URL 解码
      const decodedPayload = CryptoJS.enc.Base64.parse(payload.replace(/-/g, '+').replace(/_/g, '/'));
      const payloadStr = decodedPayload.toString(CryptoJS.enc.Utf8);
      const payloadObj = JSON.parse(payloadStr);

      return payloadObj;
    } catch (error) {
      console.error('解析 token 失败:', error);
      return null;
    }
  }

  // 获取用户 ID
  static getUserId(token) {
    try {
      const payload = this.parseToken(token);
      if (payload && payload.id) {
        return parseInt(payload.id);
      }
      return null;
    } catch (error) {
      console.error('获取用户 ID 失败:', error);
      return null;
    }
  }

  // 验证 token 是否过期（可选）
  static isTokenExpired(token) {
    try {
      const payload = this.parseToken(token);
      if (payload && payload.exp) {
        // exp 是 Unix 时间戳（秒）
        const currentTime = Math.floor(Date.now() / 1000);
        return currentTime > payload.exp;
      }
      return false;
    } catch (error) {
      console.error('验证 token 过期失败:', error);
      return true;
    }
  }
}

module.exports = JwtUtil;